package br.ufpe.cin.if680.lightmirror.core;

public class Ponto {

	double x;
	double y;
	double z;
	Vetor normal;
	Parametros parametros;
	double somaAreasTriangulos = 0;
	
	public Ponto(double x, double y, double z, Parametros p) {
		this.x = x;
		this.y = y;
		this.z = z;
		normal = new Vetor(0,0,0);
		this.parametros = p;

	}
	
	public Ponto(double cx, double cy,  Parametros p) {
		this.x = cx;
		this.y = cy;
		normal = new Vetor(0,0,0);
		this.parametros = p;
	}
	
	/*
	Retorna o ponto projetado
	*/
	Ponto projetar() {
		double x = (parametros.d*this.getX())/(parametros.hx*this.getZ());
		double y = (parametros.d*this.getY())/(parametros.hy*this.getZ());
		double z = parametros.d;
		return new Ponto(x,y,z, parametros);
	}

	Vetor sub(Ponto a){
		double x = (this.getX() - a.getX());
		double y = (this.getY() - a.getY());
		double z = (this.getZ() - a.getZ());
		return new Vetor(x,y,z);
	}
	
	Ponto soma(Ponto p){
		return new Ponto(this.getX() + p.getX(),this.getY() + p.getY(), this.getZ() + p.getZ(), parametros);
	}
	
	Ponto mult_esc(double c){
		return new Ponto(this.getX()*c, this.getY()*c, this.getZ()*c, parametros);
	}

	public double getX() {
		return x;
	}

	public void setX(double x) {
		this.x = x;
	}

	public double getY() {
		return y;
	}

	public void setY(double y) {
		this.y = y;
	}

	public double getZ() {
		return z;
	}

	public void setZ(double z) {
		this.z = z;
	}
	
	@Override
	public String toString() {
		return String.format("(%f, %f, %f)", x, y, z);
	}
}
